<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // ES6中基于class创造出来的类不能当作普通函数执行
    class A {
      constructor(x) {
        this.x = x
      }
      getX() {
        console.log(this.x);
      }
    }
    class B {
      constructor(y) {
        // A.call(this, 200)  // ES6中不能用call了
        this.y = y
      }
      getY() {
        console.log(this.y);
      }
    }
    B.prototype = Object.create(A.prototype)  // 不允许重定向原型的指向

    // 所以call继承和寄生组合继承在ES6中都行不通

    let b1 = new B(200)
    console.log(b1);

    // #########################
    // ES6中的继承
    class A {
      constructor(x) {
        this.x = x
      }
      getX() {
        console.log(this.x);
      }
    }
    //    class CHILD extends PARENT{}
    //    相当于B.prototype.__proto__ = A.prototype
    class B extends A {
      constructor(y) {
        // 子类只要继承父类，可以不写constructor
        // 一旦写了，则在constructor中的第一句话必须是super()
        // 如果不写constructor，浏览器会自己默认创建(如下)：
        // constructor(...args) { super(...args) }
        super(200)  // 相当于A.call(this, 200)把父类当作普通方法执行，给方法传递参数，让方法中的this是子类的实例
        this.y = y
      }
      getY() {
        console.log(this.y);
      }
    }
    let b1 = new B(100)
    console.log(b1);
  </script>
</body>

</html>